package me.exz.omniocular.proxy; import codechicken.nei.guihook.GuiContainerManager; import cpw.mods.fml.common.event.FMLInterModComms; import me.exz.omniocular.OmniOcular; import me.exz.omniocular.command.CommandEntityName; import me.exz.omniocular.command.CommandItemName; import me.exz.omniocular.handler.ConfigHandler; import me.exz.omniocular.handler.TooltipHandler; import me.exz.omniocular.handler.WebSocketHandler; import me.exz.omniocular.util.LogHelper; import net.minecraftforge.client.ClientCommandHandler; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.DefaultServlet; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.util.resource.Resource; import org.eclipse.jetty.websocket.servlet.WebSocketServlet; import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; import java.net.URI; import java.util.ArrayList; @SuppressWarnings("UnusedDeclaration") public class ClientProxy extends CommonProxy { public static ArrayList<WebSocketHandler> webSocketClients = new ArrayList<>(); @Override public void registerClientCommand() { ClientCommandHandler.instance.registerCommand(new CommandItemName()); ClientCommandHandler.instance.registerCommand(new CommandEntityName()); } @Override public void registerWaila() { FMLInterModComms.sendMessage("Waila", "register", "me.exz.omniocular.handler.EntityHandler.callbackRegister"); FMLInterModComms.sendMessage("Waila", "register", "me.exz.omniocular.handler.TileEntityHandler.callbackRegister"); } @Override public void registerNEI() { GuiContainerManager.addTooltipHandler(new TooltipHandler()); } @Override public void prepareConfigFiles() { try { ConfigHandler.releasePreConfigFiles(); } catch (Exception e) { LogHelper.error("Can't release pre-config files"); e.printStackTrace(); } ConfigHandler.mergeConfig(); } @Override public void startHttpServer() { Thread t = new Thread(new Runnable() { @Override public void run() { Server server = new Server(23333); try { ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); ServletHolder wsHolder = new ServletHolder("echo", new WebSocketServlet() { @Override public void configure(WebSocketServletFactory factory) { factory.register(WebSocketHandler.class); } }); context.addServlet(wsHolder, "/w"); URI uri = OmniOcular.class.getResource("/assets/omniocular/static/").toURI(); context.setBaseResource(Resource.newResource(uri)); context.setWelcomeFiles(new String[]{"index.html"}); ServletHolder holderPwd = new ServletHolder("default", DefaultServlet.class); holderPwd.setInitParameter("cacheControl", "max-age=0,public"); holderPwd.setInitParameter("useFileMappedBuffer", "false"); context.addServlet(holderPwd, "/"); server.setHandler(context); server.start(); server.join(); } catch (Exception e) { e.printStackTrace(); } } }); t.start(); } }